﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace ControlPresupuesto
{
    public partial class FrmSolicitudCompromisoRevisar : Form
    {
        public FrmSolicitudCompromisoRevisar()
        {
            InitializeComponent();
        }

        private void FrmRevisarSolicitudesCompromiso_Load(object sender, EventArgs e)
        {
            // TODO: esta línea de código carga datos en la tabla 'controlPresupuestoDataSet.spOrdenesDeCompra' Puede moverla o quitarla según sea necesario.
            this.spOrdenesDeCompraTableAdapter.Fill(this.controlPresupuestoDataSet.spOrdenesDeCompra);
            // TODO: esta línea de código carga datos en la tabla 'contratosDataSet.VISTA_CONTRATOS' Puede moverla o quitarla según sea necesario.
            this.vISTA_CONTRATOSTableAdapter.Fill(this.contratosDataSet.VISTA_CONTRATOS);
            // TODO: esta línea de código carga datos en la tabla 'controlPresupuestoDataSet.spCompromisoSolicitud' Puede moverla o quitarla según sea necesario.
            this.spCompromisoSolicitudTableAdapter.Fill(this.controlPresupuestoDataSet.spCompromisoSolicitud);
            
            //--- se valida el codigo del contrato dependiendo del valor del parametro
            this.codContratoBuscadorAWIL.AWIL_ValidarCampo = (Utils.get().getValorParametro("ValidarCodigoContratosEnAppContratos") == "SI" ? true : false);

            //-- Valido el Buscador de Ordenes de compra para evitar que se presente algun problema a la hora de aprobar la solicitud
            this.codOrdenCompraBuscadorAWIL.validar();
            
            this.filtroEstadoComboBox.SelectedIndex = 0;
        }

        private void aprobarSolicitud()
        {
            if (this.spCompromisoSolicitudDataGridView.Rows.Count == 0)
            {
                return;
            }
            if (this.spCompromisoSolicitudDataGridView.CurrentRow.Cells["ESTADO"].FormattedValue.ToString().Equals("RECHAZADO"))
            {
                MessageBox.Show("La solicitud ya fue rechazada, no puede ser aprobada.");
                return;
            }
            if (this.spCompromisoSolicitudDataGridView.CurrentRow.Cells["ORDENGLOBAL"].FormattedValue.ToString().Equals("False") && this.spCompromisoSolicitudDataGridView.CurrentRow.Cells["ESTADO"].FormattedValue.ToString().Equals("APROBADO"))
            {
                if (MessageBox.Show("La solicitud ya fue aprobada.\n¿Desea Volverla a aprobar?", "", MessageBoxButtons.YesNo) == DialogResult.No)
                {
                    return;
                }
            }
            
            if (!this.spCompromisoSolicitudDataGridView.CurrentRow.Cells["CodOrdenCompra"].FormattedValue.ToString().Equals(string.Empty))
            {
                Cursor.Current = Cursors.WaitCursor;
                FrmSolicitudCompromisoRevisar_AprobarOC frmAprobar = new FrmSolicitudCompromisoRevisar_AprobarOC(this.codPresupuestoTextBox.Text, this.codSolicitudTextBox.Text, codOrdenCompraBuscadorAWIL.AWIL_Texto, Double.Parse(codOrdenCompraBuscadorAWIL.AWIL_DataRowCurrent["ValorOrden"].ToString()), this.nombreProveedorTextBox.Text, this.idProveedorTextBox.Text, codOrdenCompraBuscadorAWIL.AWIL_DataRowCurrent["DESCRIPCION"].ToString(),this.ordenGlobalCheckBox.Checked);
                
                ///--- Me toco hacer el try-catch porque en algunas ocaciones (cuando se mostraba la ventana) se generaba una excepcion de tipo InvalidOperation 
                try
                {
                    frmAprobar.ShowDialog();
                }
                catch (Exception ex)
                {
                    frmAprobar.Show();
                    frmAprobar.Hide();
                    frmAprobar.ShowDialog();
                    //MessageBox.Show("Error Interno, por favor intentelo de nuevo en unos segundos.");
                }
            }
            else if (!this.spCompromisoSolicitudDataGridView.CurrentRow.Cells["CodContrato"].FormattedValue.ToString().Equals(string.Empty))
            {
                Cursor.Current = Cursors.WaitCursor;
                FrmSolicitudCompromisoRevisar_AprobarContrato frmAprobar = new FrmSolicitudCompromisoRevisar_AprobarContrato(this.codPresupuestoTextBox.Text, this.codSolicitudTextBox.Text, codContratoBuscadorAWIL.AWIL_Texto, this.nombreProveedorTextBox.Text, this.idProveedorTextBox.Text, this.ordenGlobalCheckBox.Checked);
                frmAprobar.ShowDialog();
            }
            Cursor.Current = Cursors.Default;
            //--- Actualizo todo
            Cursor.Current = Cursors.WaitCursor;
            FrmRevisarSolicitudesCompromiso_Load(null, null);
            Cursor.Current = Cursors.Default;

        }

        private void spCompromisoSolicitudDataGridView_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            this.aprobarSolicitud();
        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (this.filtroEstadoComboBox.Text.Trim().Equals(string.Empty) || this.filtroEstadoComboBox.Text.Equals("TODOS"))
            {
                this.spCompromisoSolicitudBindingSource.RemoveFilter();
            }
            else
            {
                this.spCompromisoSolicitudBindingSource.Filter="ESTADO ='"+this.filtroEstadoComboBox.Text+"'";
            }
        }

        #region Eventos asociados a los botones del BindingNavigator
        
        private void exportar_Click(object sender, EventArgs e)
        {
            Cursor.Current = Cursors.WaitCursor;
            try { Utils.get().exportar(this.spCompromisoSolicitudDataGridView); }
            catch (Exception ex) { MessageException.show(ex); }
            Cursor.Current = Cursors.Default;
        }

        private void actualizar_Click(object sender, EventArgs e)
        {
            Cursor.Current = Cursors.WaitCursor;
            ManageForms.reloadForm(this);
            Cursor.Current = Cursors.Default;
        }

        private void rechazarToolStripButton_Click(object sender, EventArgs e)
        {
            if (this.spCompromisoSolicitudDataGridView.Rows.Count == 0)
            {
                return;
            }
            if (this.spCompromisoSolicitudDataGridView.CurrentRow.Cells["ESTADO"].FormattedValue.ToString().Equals("RECHAZADO"))
            {
                MessageBox.Show("La solicitud ya fue rechazada, no puede ser aprobada.");
                return;
            }
            if (this.spCompromisoSolicitudDataGridView.CurrentRow.Cells["ESTADO"].FormattedValue.ToString().Equals("APROBADO"))
            {
                MessageBox.Show("La solicitud ya fue aprobada.");
                return;
            }
            FrmSolicitudCompromisoRevisar_Rechazar frmRechazar = new FrmSolicitudCompromisoRevisar_Rechazar(this.codSolicitudTextBox.Text);
            frmRechazar.ShowDialog();
            //--- Actualizo todo
            FrmRevisarSolicitudesCompromiso_Load(null, null);
        }

        private void aprobarToolStripButton_Click(object sender, EventArgs e)
        {
            this.aprobarSolicitud();
        }

        private void filter_Click(object sender, EventArgs e)
        {
            Cursor.Current = Cursors.WaitCursor;
            BindingSource bs = ((BindingNavigator)((ToolStripButton)sender).GetCurrentParent()).BindingSource;
            try
            {
                bs.RemoveFilter();
                this.toolStripTextBox1.Text = string.Empty;
            }
            catch (Exception ex)
            {
                MessageException.show(ex);
                bs.CancelEdit();
            }
            Cursor.Current = Cursors.Default;
        }

        private void filterText_TextChanged(object sender, EventArgs e)
        {

            Cursor.Current = Cursors.WaitCursor;
            BindingSource bs = ((BindingNavigator)((ToolStripTextBox)sender).GetCurrentParent()).BindingSource;
            DataTable table = ((DataSet)bs.DataSource).Tables[bs.DataMember];
            ToolStripTextBox tb = (ToolStripTextBox)sender;
            try
            {
                String filtro = "";
                foreach (DataColumn cl in table.Columns)
                {
                    filtro += "ISNULL(" + cl.ColumnName.ToString() + ",'')+' '+";
                }
                filtro = filtro.Substring(0, filtro.Length - 5);
                filtro += " like'%" + tb.Text + "%'";
                //MessageBox.Show(filtro);
                bs.Filter = filtro;
            }
            catch (Exception ex)
            {
                MessageException.show(ex);
                bs.CancelEdit();
            }
            Cursor.Current = Cursors.Default;
        }

        #endregion

        private void HistoricoButton_Click(object sender, EventArgs e)
        {
            if (!this.codSolicitudTextBox.Text.Trim().Equals(string.Empty))
            {
                new FrmSolicitudCompromisoHistorico(this.codSolicitudTextBox.Text).ShowDialog();
            }
        }

    }
}
